OpenCV(Python)のJPEG圧縮品質(quality)は必ず整数にすること! | 您所在的位置:网站首页 › opencv opencv-python › OpenCV(Python)のJPEG圧縮品質(quality)は必ず整数にすること! |
しないとこうなります
cv2.imwrite関数の場合 imwrite.py #importとかは省略 cv2.imwrite("cannot_write.jpg",img,77.7) #圧縮率が小数だと… cv2.error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'imwrite' > Overload resolution failed: > - Can't parse 'params'. Input argument doesn't provide sequence protocol > - Can't parse 'params'. Input argument doesn't provide sequence protocolcv2.imencode関数の場合 imencode.py ret,encoded=cv2.imencode(".jpg",img,(cv2.IMWRITE_JPEG_QUALITY,77.7)) decoded=cv2.imdecode(encoded,flags=cv2.IMREAD_COLOR) cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function 'imencode' > Overload resolution failed: > - Can't parse 'params'. Sequence item with index 1 has a wrong type > - Can't parse 'params'. Sequence item with index 1 has a wrong typeはい、以上。 気を付けましょう! もうちょっと補足まあ言いたいことはこれだけなんでこのまますっぱり終ってもいいんですが… さすがにちょっと雑すぎるのでもうちょっと補足しておきます opencv-python-4.5.3.56までは確かに(浮動)小数も受け付けてくれたはずなのですが、opencv-python-4.5.4.58では唐突に整数じゃないとエラーを吐くようになりました(マイナーアップグレードでいきなりdeplicatedは普通ないはずなんでバグでしょうか?)。 今回は圧縮結果をファイルに書き出さずメモリに置くimencode関数で検証しましたが、cv2.imwriteでもだいたい同じ結果になります(ドキュメントを見る限り共通のパラメータ使ってるみたいなので)。 …まあ、この手のパラメータは大体の人が整数を入れるので問題ないとは思いますが、今まで動いてたものが突然動かなくなった!みたいなことが無きにしも非ずなので気を付けましょう。 あ、ちなみに最近のPython(具体的には3.10以降?)にはopencv4.5.3は入らないみたいなので、直すべきはバージョンではありません。横着せずに必ずコードの方を整数に直してくださいね! 以上、今度こそ終わり! for foreignersYou must set OpenCV's JPEG-quality is Integer!!! |
CopyRight 2018-2019 实验室设备网 版权所有 |